package com.example.blogsystemssm.controller;

import org.springframework.util.StringUtils;
import com.example.blogsystemssm.model.UserInfo;
import com.example.blogsystemssm.common.Constant;
import com.example.blogsystemssm.common.AjaxResult;
import com.example.blogsystemssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 注册时候就发两个值
     * @param username 一个用户名
     * @param password 一个密码
     * @return
     */
    @RequestMapping("/reg")
    public Object reg(String username, String password) {
        if (!(StringUtils.hasLength(username) && StringUtils.hasLength(password))) {
            return AjaxResult.fail(-1, "非法的参数请求");
        }
//        返回受表的影响行数
        int result = userService.add(username, password);
        if (result == 1) {
            return AjaxResult.success("添加成功！" ,1);
        } else {
            return AjaxResult.fail(-1, "数据库添加出错。");
        }
    }

    /**
     * 这里的username和password参数都是从前端获取的
     * （前端发送Ajax中的data中有username和password两个键值对 后端可以直接根据key获取）
     * 基于SpringMVC框架所以可以直接读取参数
     * @return 这里的返回值是约定的，成功登录返回1，反之返回0
     */
    @RequestMapping("/login")
    public int login(HttpServletRequest request, String username, String password) {
        if (!(StringUtils.hasLength(username) && StringUtils.hasLength(password))) {
            return 0;
        }
        UserInfo user = userService.login(username, password);
        if (user == null || user.getId() <= 0) {
            return 0;
        } else {
//            将登录信息保存到session当中
            HttpSession session = request.getSession(true);
            session.setAttribute(Constant.SESSION_USERINFO_KEY, user);
            return 1;
        }
    }

    @RequestMapping("/logout")
    public boolean logout (HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session == null || session.getAttribute(Constant.SESSION_USERINFO_KEY) == null) {
            return false;
        } else {
            session.removeAttribute(Constant.SESSION_USERINFO_KEY);
            return true;
        }
    }

    @RequestMapping("/info")
    public UserInfo getInfo(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        if (session != null && session.getAttribute(Constant.SESSION_USERINFO_KEY) != null) {
            return (UserInfo) session.getAttribute(Constant.SESSION_USERINFO_KEY);
        }
        return null;
    }
}